43

» WarCraft 3 / Интерфейс

8gabriel8:
molot39, не проверял. Тут проблема не с кешем, а с действием перехода на другую карту, оно только для кампаний.
По идее легче сделать один нейтральный интерфейс для всех, чем заморачиваться с кешем. Ведь как предположительно будет с кешем? Все игроки загружаются на карту для выбора героев, после выбора все выходят и все вместе создают игру, и загружаются в другую карту, либо ту же, у каждого из них скорее всего НЕ ПОЯВИТСЯ выбранная раса, так как не припомню такого действия, которое устанавливает расу, а quq_CCCP говорит, что расы до старта карты устанавливаются; но если и появится, то столько проблем и нестыковок может случится за это время, что легче вручную расы выбрать.
была мысль, после погрузки карты значение кеша пустое, идет выбор рас, потом после выбора рас, делается рестарт (если опять же реально - не через меню, а триггероно), и уже в ней, после прогрузки карты загружаем кеш. Но как я понял это не торт
43

» WarCraft 3 / Канал

вроде на вопрос ответили, или что то не получилось?
43

» WarCraft 3 / Проверка уровня игрока и разблокировка Портала

  1. Событие такое есть, но надо делать его когда герой появляется на всей локации, функция: "Триггер - новое событие для (нужный триггер) герой входит в область (нужная область)"
  2. Новый вопрос - новая тема

ApoloZ2:
ну я так и делаю...странно...что нет такого события...и да...еще такой вопрос чтобы не создать новую тему..есть событие которое проверяет кто зашел в такую локацию...как добавить условие чтобы ВСЕ игроки в карте получили скажем так 1000 опыта через группу игроков или отряд?
вот снимок
если в условие я поставлю тригерный юнит это герой равно да и вместо picked unit поставлю triggering unit то только тот герой который зашел в область получит опыт
Группа игроков (все игроки) => добавляем опыт всем героям игроков (заранее их фиксируя)
43

» WarCraft 3 / Крепление камеры к герою

Принятый ответ
Да, через координаты, потребуется два триггера.
В первом на передвижение героя, во втором когда игрок двигает камеру, передвигаем закрепленную камеру до нужных значений.
Ты сам же ответил на этот вопрос.
43

» WarCraft 3 / Не получать опыта за героя

Принятый ответ
В триггере, где происходит старт карты (не загрузка, а хотя бы 0,01 сек. игрового времени), ставим функцию "Герой - Make (Нужный игрок) Heroes gain 0.00% experience from future kills"
Потом через отдельный триггер выставляешь столько сколько нужно.
43

» WarCraft 3 / Лив игрока при игре в мултиплеере

ApoloZ2:
в цикле он проверяет условие...если условия дают ИСТИНУ то он идет дальше и в конце создается юнит...посл этого он выходит оттуда и отключает триггер
дискорд
discord.gg/3Dgu5rG
закрывай вопрос, там решим, только как ты мне покажешь экран?
43

» WarCraft 3 / Лив игрока при игре в мултиплеере

ApoloZ2:
только в другом триггере я создаю кнопку и потом надпись высвечивается...а тут по идее тоже самое
нужно чтобы условие сработало и потом все остальное
смотри Uде расположен TURN OFF (THIS TRIGGER)
блин, скайп есть? долго сложно объяснить и плохо видно что там у тебя за гемор
43

» WarCraft 3 / Лив игрока при игре в мултиплеере

ApoloZ2:
этим и занимаюсь сейчас
я написал в другом триггере чтото похожее вот теперь поставлю такие же условия но измененные
вот как выглядит сейчас
Это что за триггер? зачем тебе два одинаковых действия?)
43

» WarCraft 3 / Лив игрока при игре в мултиплеере

ApoloZ2, мда... хз, попробуй включить изначально триггер. А в таблице (в самом триггере) нужно делать проверку, вышел ли игрок или нет, и только тогда добавлять строчку

и всё же попробуй отряд сделать через триггер плауер
43

» WarCraft 3 / Лив игрока при игре в мултиплеере

ApoloZ2:
да но...здесь не создается юнит
он просто проверяет кто вышел
мне нужно одновременно создать юнит и проверить когда он вышел из игры
в тесте, когда игрок выходит, что работает?
и кстати как проверяешь?
43

» WarCraft 3 / Лив игрока при игре в мултиплеере

ApoloZ2:
это я заметил...
не работает...
не хочет работать
может из за отряда, у меня так.
p.s.: на условие не смотри оно ненужно
Загруженные файлы
43

» WarCraft 3 / Лив игрока при игре в мултиплеере

да, только текст будет писать, к примеру: N7 Molot Вышел из игры
напиши с маленькой "вышел"
43

» WarCraft 3 / Как сделать способность?

8gabriel8:
molot39:
Уровня два, на каждом по 3 заряда. А что баф не нужен? Про иммунитет, да, придется подумать...
Я видел один. А баф как раз связан с его отменой при наложении неуязвимости, например.
Замени способность "Кровожадность" на способность предмета "Перчатки скорости", если я не ошибаюсь, то иконка не будет отображаться в панели управления, а заряды можно попробовать через уровни сделать или делать копии.
43

» WarCraft 3 / Как сделать способность?

вот тебе и благодарность, даже желание отпало помогать... лучше бы систему вознаграждения продолжал переписывать...
8gabriel8:
molot39, только у способности один уровень, ускорение атаки делается за счёт наложения заклинания, бафф которого виден, но там главное правильно поставить описание баффу, однако это страшно при иммунитете к магии, либо развеивании. По идее иммунитет к магии преодолим, если будет стоить заклинание дамми 0 маны, а вот развеивание не знаю. Просто герой задуман как антимаг, а у магов всякие развеивания очень вероятны...
Уровня два, на каждом по 3 заряда. А что баф не нужен? Про иммунитет, да, придется подумать... Или потестить, а лучше иммунитет или скидку бафов переделать так, что бы слитали отрицательные бафы.

А это вообще камень в огород, думайте о последствиях прежде чем писать!
quq_CCCP:
molot39, да что вы говорите, язык не отсох?
Есть хак на память, есть внезапно способность рунных браслетов, которая нам поможет отличить физический от магического урона.
Не надо плести чепуху если вы не разбираетесь.
Это не отлов типа урона, а одно из решений.
Проверка на бафф не есть хорошо для героя, - это орб который внезапно не дружит с другими орбами.
Тут вообще про что?
Особенно порадовал ваш дико ядреный костыль с кровожадностью, оно если что не стак, а еще и рассеиваться 100500 диспелами... Не кастуется на неуязвимых, маг имунных, ну кароче явно не для такой пассивки.
Стакается, тестим, (так и знал что нужно скорость атаки выдать). Это наработка, а не полная копия способности, на худой конец заменяем кровожадность на способность от предмета "Перчатки скорости" - и всё!
Код как всегда отпадный, так и хочется прыгнуть в окно...
Прыгай, я не против...
На будущее: не нужно прям так унижать наработку, это не копия (повторюсь), есть недочеты тактично разъясни, лично мне пофиг что там кто думает, но если что то не устравивает предлагаем свои поправки, а не макаем автора в фекалии
43

» WarCraft 3 / Как сделать способность?

Тип урона отследить не возможно, единственно если прям так хочется что бы не выдавался стак от жара, то в условии ставь блок на баф. Вот наработка
Загруженные файлы
43

» WarCraft 3 / Как сделать способность?

8gabriel8:
Он имеет ввиду, чтобы ты проверил способность вместе с предметом Огненный плащ или способностью Жар преисподней, не будет ли это считаться атакой юнита, как будет работать, когда много юнитов к тебе подбегает, ведь часть из них как бы будет атакована не в первый раз, а часть в первый одновременно, если эффект будет считаться атакой, естественно.
а... понял
43

» WarCraft 3 / Как сделать способность?

Borodach:
molot39, Продебаж код на количество стаков... к примеру с "огненым плащем" огруженным несколькими юнитами
чё?
не отвлекайте, я восстанавливаю болванку с нуля, удалил старую
43

» WarCraft 3 / Как сделать способность?

могу даже болванку скинуть, только малек доработаю болванку. В самом проекте исправил, а в болванке нет=)
43

» WarCraft 3 / Как сделать способность?

8gabriel8:
quq_CCCP, а мне другую реализацию скинули:
function Trig_Fervor_Conditions takes nothing returns boolean
    return GetUnitAbilityLevel(GetAttacker(),'A06C') > 0 and not IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)
endfunction

function Trig_Fervor_Tick takes nothing returns nothing
    local unit u
    local unit targ
    local trigger t = GetTriggeringTrigger()
    local hashtable gc = udg_HashCache
    local integer s = GetHandleId(t)
    local integer lvl = GetUnitAbilityLevel(u,'A06C')
    local integer c = 0

    if GetTriggerEventId() == EVENT_UNIT_DAMAGED then
        set u = LoadUnitHandle(gc,s,1)

        if GetEventDamageSource() == u then
            set targ = GetTriggerUnit()
            set c = GetUnitAbilityLevel(u,'A08T')

            if targ != LoadUnitHandle(gc,GetHandleId(u),StringHash("trollfervor")) then
                set c = R2I(c/2)
                call SaveUnitHandle(gc,GetHandleId(u),StringHash("trollfervor"),targ)
            else
                set c = c+1
                if c > lvl+1 then
                    set c = lvl+1
                endif
            endif
            call SetUnitAbilityLevel(u,'A08T',c)
            set targ = null
        endif
        set u = null
    endif
    call TriggerRemoveAction(t,LoadTriggerActionHandle(gc,s,2))
    call FlushChildHashtable(gc,s)
    call KillTrigger(t)
    set t = null
    set gc = null
endfunction

function Trig_Fervor takes nothing returns nothing
    local unit u = GetAttacker()
    local unit targ = GetTriggerUnit()
    local trigger t = CreateTrigger()
    local integer s = GetHandleId(t)
    local hashtable gc = udg_HashCache
    local triggeraction ta
    if GetUnitAbilityLevel(u,'A08T') == 0 then
        call UnitAddAbility(u,'A08T')
    endif
    call SaveUnitHandle(gc,s,1,u)
    call TriggerRegisterUnitEvent(t,targ,EVENT_UNIT_DAMAGED)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_ISSUED_ORDER)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_ISSUED_POINT_ORDER)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_ISSUED_TARGET_ORDER)
    call TriggerRegisterTimerEvent(t,2.5,false)
    set ta = TriggerAddAction(t,function Trig_Fervor_Tick)
    call SaveTriggerActionHandle(gc,s,2,ta)
    set u = null
    set targ = null
    set t = null
    set gc = null
    set ta = null
endfunction

function InitTrig_Fervor takes nothing returns nothing
    set gg_trg_Fervor = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Fervor, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Fervor, Condition( function Trig_Fervor_Conditions ) )
    call TriggerAddAction( gg_trg_Fervor, function Trig_Fervor)
endfunction
И в инициализации создаётся хеш-таблица udg_HashCache.
И что совсем ни как без хеша?